package string;

public class StringDemo {
    public static void main(String[] args) {
/*        String s1 = "123abc";//堆中创建123abc字符量对象，并缓存到常量池中
        //编译器在编译时，发现是两个字面量相连，则会直接连接好并将结果保存起来
        //如下语句会被编译成:String s2 = "123abd";
        String s2 = "123"+"abc";
        System.out.println(s1 == s2);//T

        String s3 = "123";
        //因为s3是一个变量，所以在编译时并不会直接编译好
        String s4 = s3+"abc";//创建一个新的对象存储123abc
        System.out.println(s1 == s4);//F*/

        String s = new String("hello");//创建了2个对象
        String s1 = "hello";//复用常量池中的字面量对象地址
        System.out.println(s == s1);//F ==比较的是字符串的地址是否相同
        //在实际应用中,String比较相等一般是比较字符串的内容是否相同
        System.out.println(s.equals(s1));//T   equals()比较的是内容是否相等

/*        String s1 = "123abc";
        String s2 = "123abc";
        String s3 = "123abc";
        System.out.println(s1 == s2);
        System.out.println(s1 == s3);
        System.out.println(s2 == s3);
        s1 = s1 + "!";
        System.out.println(s1 == s2);*/
    }
}
